package com.sws.staff.service.impl;

import com.sws.staff.domain.RyStaff;
import com.sws.staff.mapper.RyStaffMapper;
import com.sws.staff.service.RyStaffWxBinder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 工作人员微信绑定实现类(员工模块)
 */
@Service
public class RyStaffWxBinderImpl implements RyStaffWxBinder {
    
    private static final Logger logger = LoggerFactory.getLogger(RyStaffWxBinderImpl.class);
    
    @Autowired
    private RyStaffMapper ryStaffMapper;
    
    /**
     * 绑定微信用户到工作人员
     * @param name 姓名
     * @param phone 手机号
     * @param openid 微信openid
     * @return 绑定结果
     */
    @Override
    public Map<String, Object> bindWxUserToStaff(String name, String phone, String openid) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            // 查找匹配的工作人员记录
            RyStaff queryStaff = new RyStaff();
            queryStaff.setName(name);
            queryStaff.setPhone(phone);
            List<RyStaff> staffList = ryStaffMapper.selectRyStaffList(queryStaff);
            
            if (staffList == null || staffList.isEmpty()) {
                result.put("success", false);
                result.put("msg", "未找到匹配的工作人员记录，请检查姓名和手机号是否正确");
                return result;
            }
            
            // 检查该openid是否已经绑定了其他工作人员
            RyStaff openidCheck = new RyStaff();
            openidCheck.setOpenid(openid);
            List<RyStaff> existingStaff = ryStaffMapper.selectRyStaffList(openidCheck);
            
            if (existingStaff != null && !existingStaff.isEmpty()) {
                RyStaff existing = existingStaff.get(0);
                if (!existing.getName().equals(name) || !existing.getPhone().equals(phone)) {
                    result.put("success", false);
                    result.put("msg", "此微信号已绑定其他工作人员，请联系管理员");
                    return result;
                } else {
                    result.put("success", true);
                    result.put("msg", "您已成功绑定，无需重复操作");
                    return result;
                }
            }
            
            // 更新工作人员记录，绑定openid
            RyStaff staff = staffList.get(0);
            staff.setOpenid(openid);
            ryStaffMapper.updateRyStaff(staff);
            
            result.put("success", true);
            result.put("msg", "绑定成功，您现在可以使用微信访问工作人员功能");
            logger.info("工作人员绑定成功：name={}, phone={}, openid={}", name, phone, openid);
            
        } catch (Exception e) {
            logger.error("工作人员绑定微信失败", e);
            result.put("success", false);
            result.put("msg", "绑定失败：" + e.getMessage());
        }
        
        return result;
    }
    
    /**
     * 根据openid验证是否是工作人员
     * @param openid 微信openid
     * @return 验证结果，包括工作人员信息
     */
    @Override
    public Map<String, Object> verifyStaffIdentity(String openid) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            // 根据openid查询工作人员记录
            RyStaff queryStaff = new RyStaff();
            queryStaff.setOpenid(openid);
            List<RyStaff> staffList = ryStaffMapper.selectRyStaffList(queryStaff);
            
            if (staffList != null && !staffList.isEmpty()) {
                RyStaff staff = staffList.get(0);
                result.put("success", true);
                result.put("staffInfo", staff);
                return result;
            }
            
            result.put("success", false);
            result.put("msg", "未找到绑定的工作人员信息");
            
        } catch (Exception e) {
            logger.error("验证工作人员身份失败", e);
            result.put("success", false);
            result.put("msg", "验证身份失败：" + e.getMessage());
        }
        
        return result;
    }
    
    /**
     * 根据工作人员PID查询相关顾客
     * @param staffPid 工作人员PID
     * @return 顾客列表
     */
    @Override
    public Map<String, Object> getStaffCustomers(String staffPid) {
        Map<String, Object> result = new HashMap<>();
        
        try {
            // TODO: 这里需要实现根据技师PID查询顾客的逻辑
            // 此处可以根据预约表查询该技师服务过的顾客，或者通过其他关联关系查询
            // 由于需求中未明确定义技师与顾客的关联方式，此处返回一个空列表
            
            result.put("success", true);
            result.put("customers", new HashMap<>());
            
        } catch (Exception e) {
            logger.error("查询技师关联顾客失败", e);
            result.put("success", false);
            result.put("msg", "查询顾客列表失败：" + e.getMessage());
        }
        
        return result;
    }
} 